{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# Arnoldi Iteration with Complex Eigenvalues"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "collapsed": true
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "import numpy.linalg as la\n",
        "\n",
        "import matplotlib.pyplot as pt"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Let us make a matrix with a defined set of eigenvalues and eigenvectors, given by `eigvals` and `eigvecs`."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "[  1. +1.j   2. +2.j   3. +3.j   4. +4.j   5. +5.j   6. +6.j   7. +7.j\n",
            "   8. +8.j   9. +9.j  10.+10.j  11.+11.j  12.+12.j   1. -1.j   2. -2.j\n",
            "   3. -3.j   4. -4.j   5. -5.j   6. -6.j   7. -7.j   8. -8.j   9. -9.j\n",
            "  10.-10.j  11.-11.j  12.-12.j]\n",
            "[ 12.-12.j  12.+12.j  11.-11.j  11.+11.j  10.-10.j  10.+10.j   9. +9.j\n",
            "   9. -9.j   8. -8.j   8. +8.j   7. +7.j   7. -7.j   6. +6.j   5. +5.j\n",
            "   4. +4.j   3. +3.j   2. +2.j   1. +1.j   6. -6.j   5. -5.j   1. -1.j\n",
            "   4. -4.j   3. -3.j   2. -2.j]\n"
          ]
        }
      ],
      "source": [
        "np.random.seed(40)\n",
        "\n",
        "# Generate matrix with eigenvalues 1...25\n",
        "nhalf = 12\n",
        "n = 2*nhalf\n",
        "eigvals = np.zeros(n,dtype=np.complex)\n",
        "eigvals[0:nhalf] = np.linspace(1., nhalf, nhalf)+1j*np.linspace(1., nhalf, nhalf)\n",
        "eigvals[nhalf:] = eigvals[0:nhalf].conj()\n",
        "eigvecs = np.random.randn(n, n)\n",
        "print(eigvals)\n",
        "\n",
        "A = la.solve(eigvecs, np.dot(np.diag(eigvals), eigvecs))\n",
        "print(la.eig(A)[0])"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Initialization"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Set up $Q$ and $H$:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "collapsed": true
      },
      "outputs": [],
      "source": [
        "Q = np.zeros((n, n),dtype=np.complex)\n",
        "H = np.zeros((n, n),dtype=np.complex)\n",
        "\n",
        "k = 0"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Pick a starting vector, normalize it"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "collapsed": true
      },
      "outputs": [],
      "source": [
        "x0 = np.random.randn(n)#+1j*np.random.randn(n)\n",
        "x0 = x0/la.norm(x0)\n",
        "\n",
        "# Poke it into the first column of Q\n",
        "Q[:, k] = x0\n",
        "\n",
        "del x0"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Make a list to save arrays of Ritz values, including the maximum Ritz value:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "collapsed": true
      },
      "outputs": [],
      "source": [
        "ritz_values = []\n",
        "ritz_max = []"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Algorithm"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Carry out one iteration of Arnoldi iteration.\n",
        "\n",
        "Run this cell in-place (Ctrl-Enter) until H is filled."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 29,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "23\n",
            "(12+12j)\n"
          ]
        },
        {
          "data": {
            "image/png": "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\nQmCC\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7f29c5870b00>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "print(k)\n",
        "\n",
        "u = A @ Q[:, k]\n",
        "\n",
        "# Carry out Gram-Schmidt on u against Q\n",
        "for j in range(k+1):\n",
        "    qj = Q[:, j]\n",
        "    H[j,k] = np.inner(qj.conj(), u)\n",
        "    u = u - H[j,k]*qj\n",
        "\n",
        "if k+1 < n:\n",
        "    H[k+1, k] = la.norm(u)\n",
        "    Q[:, k+1] = u/H[k+1, k]\n",
        "\n",
        "k += 1\n",
        "\n",
        "pt.spy(H)\n",
        "D = la.eig(H)[0]\n",
        "max_ritz = D[np.argmax(np.abs(D))]\n",
        "print(max_ritz)\n",
        "ritz_max.append(max_ritz)\n",
        "ritz_values.append(D)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Check that $Q^T A Q =H$:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 30,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "7.6486025612314716e-10"
            ]
          },
          "execution_count": 30,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "la.norm(Q[:,:k-1].T.conj() @ A @ Q[:,:k-1] - H[:k-1,:k-1])/ la.norm(A)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Check that Q is orthogonal:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 31,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "1.1067617560433375e-09"
            ]
          },
          "execution_count": 31,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "la.norm((Q.T.conj() @ Q)[:k-1,:k-1] - np.eye(k-1))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Look at convergence of largest Ritz value to dominant eigenvalue"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 32,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7f29c57b83c8>]"
            ]
          },
          "execution_count": 32,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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\ncP/4uXEAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7f29c585d0b8>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "max_eigval = eigvals[np.argmax(np.abs(eigvals))]\n",
        "pt.plot(np.abs(max_eigval-ritz_max)/np.abs(max_eigval))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Plot convergence of Ritz values"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Enable the Ritz value collection above to make this work."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 39,
      "metadata": {},
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "/home/edgar/environments/py35env/lib/python3.5/site-packages/numpy/core/numeric.py:531: ComplexWarning: Casting complex values to real discards the imaginary part\n",
            "  return array(a, dtype, copy=False, order=order)\n"
          ]
        },
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7f29c5647be0>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "for i, rv in enumerate(ritz_values[1:]):\n",
        "    pt.plot([i] * len(rv), rv, \"x\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": true
      },
      "outputs": [],
      "source": []
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.7.2+"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 2
}